package br.com.Bolao.application.controller.usuarios;

import br.com.Bolao.application.controller.BaseController;
import br.com.Bolao.application.dao.usuarios.UsuarioDAO;
import br.com.Bolao.model.Usuario;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.security.Identity;

/**
 *
 * @author frederico.cruz
 */
@Scope(ScopeType.CONVERSATION)
@Name("manterUsuarioAction")
public class ManterUsuarioController extends BaseController {

    @In
    private UsuarioDAO usuarioDAO;
    private Usuario usuario;
    private DataModel listaUsuarios;

    @Begin(flushMode = FlushModeType.MANUAL, join = true)
    public void setup(Usuario usuarioSelecionado) {
        usuario = usuarioSelecionado;
    }

    @End
    public void alterarUsuario(Usuario usuarioSelecionado) {
        try {
            usuarioDAO.atualizar(usuarioSelecionado);
            getListaUsuarios();
            adicionarMensagemInformacao("Usuário alterado com sucesso!");
        } catch (Exception e) {
            adicionarMensagemErro("Erro ao excluir o usuário: " + e.getMessage());
        }
    }

    @End
    public void excluir(String usuarioLogado) {
        try {
            if (usuario.equals(usuarioDAO.obterPorUsuario(usuarioLogado))) {
                throw new Exception("O usuário está logado. Não é possível excluir um usuário logado.");
            } else {
                usuarioDAO.excluir(usuario);
                getListaUsuarios();
                adicionarMensagemInformacao("Usuário excluído com sucesso!");
            }
        } catch (Exception e) {
            adicionarMensagemErro("Erro ao excluir o usuário: " + e.getMessage());
        }
    }

    @End
    public String cancelar() throws Exception {
        try {
            usuarioDAO.cancelar();
        } catch (Exception e) {
            adicionarMensagemErro("Erro ao cancelar: " + e.getMessage());
        }
        return null;
    }

    /**
     * GETs e SETs
     */
    public DataModel getListaUsuarios() {
        return listaUsuarios = new ListDataModel(usuarioDAO.obterTodos());
    }

    public void setListaUsuarios(DataModel listaUsuarios) {
        this.listaUsuarios = listaUsuarios;
    }
}
